package com.hnote.hnoteapplication.base.utils;

import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Build;
import android.telephony.TelephonyManager;
import android.util.DisplayMetrics;

import com.hnote.hnoteapplication.base.utils.rsa_tools.SignUtils;

import java.util.Map;
import java.util.UUID;


/**
 * Created by Administrator on 2017/2/13 0013.
 */

public class SystemUtils {
    /**
     * =====================================================
     * 功    能： 请求接口公共信息获取
     * 作    者： 加菲猫
     * 邮    箱： pfliu@3box.cc
     * 时    间： 2016/11/21 0021 10:28
     * =====================================================
     */
    public static void initInfo(Map<String, String> pairs, Context context) {

        pairs.put("pm", 2 + "");
        pairs.put("os", "ANDROID#" + getAndroidSDKVersion() + "");
        pairs.put("resolution", getResolution(context));
        pairs.put("network", getCurrentNetType(context) + "");
        pairs.put("imgquality", getImgquality(context) + "");
        pairs.put("deviceId", getDeviceId(context));
        pairs.put("V", (getPackageInfo(context).versionName).replace(".",""));
        pairs.put("_uid", "");
        pairs.put("token", "");
        pairs.put("deviceType", "1");

        pairs.put("sign", SignUtils.rsaSign(pairs, SignUtils.PRIVATE_KEY));

    }

    /**
     * =====================================================
     * 功    能： 获取设备Android sdk 版本
     * 作    者： 加菲猫
     * 邮    箱： pfliu@3box.cc
     * 时    间： 2016/11/22 0022 12:00
     * =====================================================
     */
    public static int getAndroidSDKVersion() {
        int version = 0;
        try {
            version = Build.VERSION.SDK_INT;
        } catch (NumberFormatException e) {

        }
        return version;
    }

    /**
     * =====================================================
     * 功    能： 获取手机分辨率
     * 作    者： 加菲猫
     * 邮    箱： pfliu@3box.cc
     * 时    间： 2016/11/22 0022 11:59
     * =====================================================
     */
    public static String getResolution(Context context) {
        DisplayMetrics dm = context.getResources().getDisplayMetrics();
        int w_screen = dm.widthPixels;
        int h_screen = dm.heightPixels;
        return w_screen + "_" + h_screen;
    }

    /**
     * =====================================================
     * 功    能： 获取手机网络类型
     * 作    者： 加菲猫
     * 邮    箱： pfliu@3box.cc
     * 时    间： 2016/11/22 0022 11:58
     * =====================================================
     */
    public static int getCurrentNetType(Context context) {
        int network = -1;
        ConnectivityManager cm = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo info = cm.getActiveNetworkInfo();
        if (info == null) {
            network = -1;
        } else if (info.getType() == ConnectivityManager.TYPE_WIFI) {
            // wifi
            network = 0;
        } else if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
            int subType = info.getSubtype();
            if (subType == TelephonyManager.NETWORK_TYPE_CDMA
                    || subType == TelephonyManager.NETWORK_TYPE_GPRS
                    || subType == TelephonyManager.NETWORK_TYPE_EDGE) {
                // 2g
                network = 1;
            } else if (subType == TelephonyManager.NETWORK_TYPE_UMTS
                    || subType == TelephonyManager.NETWORK_TYPE_HSDPA
                    || subType == TelephonyManager.NETWORK_TYPE_EVDO_A
                    || subType == TelephonyManager.NETWORK_TYPE_EVDO_0
                    || subType == TelephonyManager.NETWORK_TYPE_EVDO_B) {
                // 3g
                network = 2;
            } else if (subType == TelephonyManager.NETWORK_TYPE_LTE) {// LTE是3g到4g的过渡，是3.9G的全球标准
                // 4g
                network = 3;
            }
        }
        return network;
    }

    /**
     * =====================================================
     * 功    能： 图片质量
     * 作    者： 加菲猫
     * 邮    箱： pfliu@3box.cc
     * 时    间： 2016/11/22 0022 11:58
     * =====================================================
     */
    public static int getImgquality(Context context) {
        if (getCurrentNetType(context) == 0 || getCurrentNetType(context) == 3) {
            return 1;
        } else {
            return 0;
        }
    }

    /**
     * =====================================================
     * 功    能： 获取设备识别号
     * 作    者： 加菲猫
     * 邮    箱： pfliu@3box.cc
     * 时    间： 2016/11/22 0022 12:00
     * =====================================================
     */
    public static String getDeviceId(final Context context) {
        String serial;

        String m_szDevIDShort = "35" +
                Build.BOARD.length() % 10 + Build.BRAND.length() % 10 +

                Build.CPU_ABI.length() % 10 + Build.DEVICE.length() % 10 +

                Build.DISPLAY.length() % 10 + Build.HOST.length() % 10 +

                Build.ID.length() % 10 + Build.MANUFACTURER.length() % 10 +

                Build.MODEL.length() % 10 + Build.PRODUCT.length() % 10 +

                Build.TAGS.length() % 10 + Build.TYPE.length() % 10 +

                Build.USER.length() % 10; //13 位

        try {
            serial = Build.class.getField("SERIAL").get(null).toString();
            //API>=9 使用serial号
            return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
        } catch (Exception exception) {
            //serial需要一个初始化
            serial = "serial"; // 随便一个初始化
        }
        //使用硬件信息拼凑出来的15位号码
        return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
    }

    /**
     * =====================================================
     * 功    能： 获取版本信息
     * 作    者： 加菲猫
     * 邮    箱： pfliu@3box.cc
     * 时    间： 2016/11/22 0022 11:58
     * =====================================================
     */
    public static PackageInfo getPackageInfo(Context context) {
        PackageInfo pi = null;
        try {
            PackageManager pm = context.getPackageManager();
            pi = pm.getPackageInfo(context.getPackageName(),
                    PackageManager.GET_CONFIGURATIONS);
            return pi;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return pi;
    }

    /**
     * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
     */
    public static int dip2px(Context context, float dpValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }

    /**
     * \ 根据手机的分辨率从 px(像素) 的单位 转成为 dp
     */
    public static int px2dip(Context context, float pxValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }
}
